#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/**
 * 
 */
package ${package}.bean;

import java.util.ArrayList;
import java.util.HashSet;

import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;

import org.primefaces.model.DualListModel;

import ${package}.dao.api.LivroDao;
import ${package}.model.Autor;
import ${package}.model.Livro;
import ${package}.negocio.api.AutorNegocio;
import ${package}.negocio.api.LivroNegocio;
import br.com.framework.apresentacao.bean.CRUDBean;
import br.com.framework.persistencia.sort.Order;

/**
 * @author Cleber
 *
 */
@Named
@ConversationScoped
public class LivroBean extends CRUDBean<Livro, LivroDao, LivroNegocio>{
	
	@Inject
	private AutorNegocio autorNegocio;
	
	private DualListModel<Autor> autores;

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * @param entidadeClass
	 */
	public LivroBean() {
		super(Livro.class);
	}

	@Inject
	protected void setNegocio(LivroNegocio negocio) {
		super.setNegocio(negocio);
	}

	/**
	 * @return the autores
	 */
	public DualListModel<Autor> getAutores() {
		return autores;
	}

	/**
	 * @param autores the autores to set
	 */
	public void setAutores(DualListModel<Autor> autores) {
		this.autores = autores;
	}
	
	@Override
	protected void beforeOutcomeCreate() {
		autores = new DualListModel<Autor>();
		autores.setSource(autorNegocio.findAll("nome", Order.ASCENDING, true));
		autores.setTarget(new ArrayList<Autor>());
	}
	
	@Override
	protected void beforeOutcomeEdit() {
		autores = new DualListModel<Autor>();
		autores.setSource(autorNegocio.findAll("nome", Order.ASCENDING, true));
		autores.setTarget(new ArrayList<Autor>(getEntidade().getAutores()));
		autores.getSource().removeAll(getEntidade().getAutores());
		super.beforeOutcomeEdit();
	}
	
	@Override
	public String salvar() {
		if (getEntidade().getAutores() == null) {
			getEntidade().setAutores(new HashSet<Autor>());
		}
		getEntidade().getAutores().addAll(getAutores().getTarget());
		getEntidade().getAutores().retainAll(getAutores().getTarget());
		return super.salvar();
	}
	
}
